package org.misalen.web.database.dao.mysql;

import java.io.Serializable;

import org.misalen.web.database.model.mysql.BaseSqlModel;
import org.misalen.web.database.util.PaginationFrom;

/**
 * 基础数据库操作类
 * 
 * @author 赵国超
 * 
 */
public interface BaseMySqlDao<T extends BaseSqlModel> {

	/**
	 * 保存一个对象
	 * 
	 * @param o
	 * @return
	 */
	Serializable save(T allclass);

	/**
	 * 根据对象中的id删除一个对象
	 * 
	 * @param o
	 */
	void delete(T allclass);

	void delete(Class<T> allclass, String allclassSeria);

	/**
	 * 更新一个对象
	 * 
	 * @param o
	 */
	void update(T allclass);
	void updateNotNull(T allclass);

	/**
	 * 查询集合(分页)
	 * 
	 * @param hql语句
	 *            where id=? and name=?
	 * @param 条件数组
	 *            1 2 则 id=1 and name=2
	 * @param page
	 *            查询第几页
	 * @param rows
	 *            每页显示几条记录
	 * @return
	 */
	PaginationFrom<?> findPageByHql(String hql, Object[] param, PaginationFrom<T> pagination);

	/**
	 * 查询集合(分页) 不支持联合查询
	 * 
	 * @param hql语句
	 *            where id=? and name=?
	 * @param 条件数组
	 *            1 2 则 id=1 and name=2
	 * @param page
	 *            查询第几页
	 * @param rows
	 *            每页显示几条记录
	 * @return
	 */
	PaginationFrom<T> findPageByBean(T allclass, PaginationFrom<T> pagination);

	/**
	 * 查询集合(分页)
	 * 
	 * @param hql语句
	 *            where id=? and name=?
	 * @param 条件数组
	 *            1 2 则 id=1 and name=2
	 * @param page
	 *            查询第几页
	 * @param rows
	 *            每页显示几条记录
	 * @return
	 */
	PaginationFrom<?> findPageBySql(String sql, Object[] param, PaginationFrom<T> pagination,Class<T> allclass);

	/**
	 * 获得一个对象
	 * 
	 * @param c
	 *            对象类型 .class
	 * @param id
	 *            主键
	 * @return Object
	 */
	T get(Class<T> allclass, String allclassSeria);
	T get(String hql, Object[] param);

	/**
	 * select count(*) from 类
	 * 
	 * @param hql
	 * @param param
	 * @return
	 */
	Long count(String hql, Object[] param);

}